package com.own.business.system.menu.business.service;

import com.own.business.system.menu.business.entity.form.SystemMenuAdvancedSortForm;
import com.own.business.system.menu.entity.bo.SystemMenuBo;
import com.own.business.system.menu.entity.map.SystemMenuMapVo;
import com.own.business.system.menu.entity.po.SystemMenu;
import com.own.business.system.menu.entity.query.SystemMenuQuery;
import com.own.business.system.menu.entity.vo.SystemMenuVo;
import com.own.component.common.base.service.BaseService;

import java.util.List;

/**
 * SystemMenuService
 *
 * @author chenxueli
 * @date 2024-03-31 09:22:58
 */
public interface SystemMenuService extends BaseService<
        SystemMenu,
        SystemMenuBo,
        SystemMenuVo,
        SystemMenuMapVo,
        SystemMenuQuery
        > {

    /**
     * 根据客户端id查询可用的菜单列表
     *
     * @param clientId 客户端id
     * @return 菜单列表
     */
    default List<SystemMenu> listEnableByClientId(String clientId) {
        return listByClientId(clientId, false, true);
    }

    /**
     * 根据客户端id查询菜单列表
     *
     * @param clientId  客户端id
     * @param isDisable 是否禁用
     * @param isShow    是否显示
     * @return 菜单列表
     */
    List<SystemMenu> listByClientId(String clientId, Boolean isDisable, Boolean isShow);

    /**
     * 根据菜单id禁用菜单
     *
     * @param menuId  菜单id
     * @param disable 禁用状态 0-启用 1-禁用
     */
    void updateDisableById(Long menuId, Integer disable);

    /**
     * 根据菜单id禁用菜单
     *
     * @param menuId 菜单id
     * @param show   禁用状态 0-显示 1-隐藏
     */
    void updateShowById(Long menuId, Integer show);

    /**
     * 根据模块名称查询菜单
     *
     * @param module 模块名称
     * @param client 客户端
     * @return 菜单
     */
    SystemMenu getByModule(String module, String client);

    /**
     * 高级排序
     *
     * @param form form
     */
    void sort(SystemMenuAdvancedSortForm form);

}

